package com.pan.download5.ctrl;

import com.pan.entity.Chapter;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;

/**
 *
 * 这个任务发布器的主要是通过AtomicInteger类自增原子操作来实现同步的
 * 同时，利用数组的特性，不涉及写操作。
 * 性能相对而言相对比较高
 */
public class ArrayTaskPublish implements TaskSyncPublish {
//    private ArrayList<Chapter> chapterArrayList;

    private Chapter[] arr;
    public ArrayTaskPublish(List<Chapter> chapterList) {
//        this.chapterArrayList = new ArrayList<>(chapterList);
        arr = chapterList.toArray(new Chapter[chapterList.size()]);

    }

    private AtomicInteger taskId = new AtomicInteger(0);


    @Override
    public Chapter publish() {
        int index = taskId.getAndIncrement();
//        return index<chapterArrayList.size()?chapterArrayList.get(index):null;
        return index<arr.length?arr[index]:null;
    }

}
